package com.ayu.shortlink.admin.idempotent;

import groovyjarjarantlr4.v4.runtime.misc.NotNull;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 幂等注解之避免重复消费
 *
 * @Target 表明可以应用在哪里
 * @Retention 表明注解的生命周期(注解的保留策略)
 * RetentionPolicy.SOURCE：注解仅在源代码中存在，不会被编译到字节码中，编译后丢弃。用于编译器或工具使用的注解。
 * RetentionPolicy.CLASS：注解会被编译到字节码中，但在运行时不可见。默认值。
 * RetentionPolicy.RUNTIME：注解会被编译到字节码中，并且在运行时可通过反射读取。用于需要在运行时处理注解的情况。
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoRepeatSubmit {
    //消息
    String message() default "请不要重复点击";

    //标识(可用于不同的接口)
    @NotNull
    String Mark();
}
